package com.example.cheeseerpadmin.sys.common;

import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.ArrayList;
import java.util.List;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class TreeNode {
    private Integer id;

    /**
     * 这里之所以这样设置，其实就是为了让我们从数据库查到pid数据以后传给前端是使用的是parentId这个属性名
     * 因为，在layui当中的dtree中的listJson格式需要的是parentId而不是pid，这样的话，数据库就可以和前端关联起来了
     * 至于其他的属性则不变。而且这里我们用到的TreeNode的属性只有四个，所以重新构造一个函数就可以直接使用TreeNode这个类了
     */
    @JsonProperty("parentId")
    private Integer pid;
    private String title;
    private String icon;
    private String href;
    private Boolean spread;
    private List<TreeNode> children = new ArrayList<TreeNode>();

    //0代表没选中，1代表选中，这里切记默认要选中，不然其他用到TreeNode地方却没有使用checkArr的地方就无法进行与之对应的解析，从而导致前端无法正常显示
    private String checkArr = "0";

    public TreeNode(Integer id, Integer pid, String title, String icon, String href, Boolean spread) {
        this.id = id;
        this.pid = pid;
        this.title = title;
        this.icon = icon;
        this.href = href;
        this.spread = spread;
    }

    public TreeNode(Integer id, Integer pid, String title, Boolean spread) {
        this.id = id;
        this.pid = pid;
        this.title = title;
        this.spread = spread;
    }

    /**
     * 对于部门管理的菜单树Json格式，我们使用的不是和之前生成左侧菜单树那样的标准Json格式，而是使用的list列表的Json格式。
     * 意思就是说一个树节点当中不存在层次分明的子节点，而是将这个子节点用一个parentId来代替，从而知道这个节点的父节点是谁。
     * 至于父节点的parentId则设置为0即可。所以这里就只需要四种属性就可以解决问题了
     *
     * @param id
     * @param pid
     * @param title
     * @param spread
     */
    public TreeNode(Integer id, Integer pid, String title, Boolean spread, String checkArr) {
        this.id = id;
        this.pid = pid;
        this.title = title;
        this.spread = spread;
        this.checkArr = checkArr;
    }
}
